#ifndef GRAPHICS__RS_H_
#define GRAPHICS__RS_H_

#include "framework.h"
using namespace poly;

namespace graphics
{

/*===================================================================================*/
/*RENDER STATES*/
/*===================================================================================*/
class RS
{
public:
	enum RS_Enum{
		RS_NOSTATE,
		RS_WIREFRAME,
		RS_ALPHABLEND,
		RS_MATERIAL,
		RS_MAXSTATES
	};
	
	RS();
	RS_Enum RS_Type;

};

/*===================================================================================*/
/*RENDER STATES: ALPHA BLEND*/
/*===================================================================================*/
class RS_AlphaBlend : public RS
{
public:
	enum BlendType{
		BLEND_ZERO,
		BLEND_ONE,
		BLEND_SRCCOLOR,
		BLEND_INVSRCCOLOR,
		BLEND_SRCALPHA,			//Default Source Blend
		BLEND_INVSRCALPHA,		//Default Destination Blend
		BLEND_DESTALPHA,
		BLEND_INVDESTALPHA,
		BLEND_DESTCOLOR,
		BLEND_INVDESTCOLOR,
		BLEND_SRCALPHASAT,
		BLEND_BOTHSRCALPHA,
		BLEND_BOTHINVSRCALPHA,
		BLEND_BLENDFACTOR,
		BLEND_INVBLENDFACTOR,
		BLEND_SRCCOLOR2,
		BLEND_INVSRCCOLOR2
	};

	BlendType Source;
	BlendType Destination;

	RS_AlphaBlend();

	void SetBlendDst(BlendType);
	void SetBlendSrc(BlendType);
};

/*===================================================================================*/
/*RENDER STATES: MATERIAL*/
/*===================================================================================*/
class RS_Material : public RS
{
public:

	RS_Material();

	void SetEmissive (float, float, float);
	void SetAmbient  (float, float, float);
	void SetDiffuse  (float, float, float);
	void SetSpecular (float, float, float);
	void SetShininess(float);

	colorRGB Emissive;
	colorRGB Ambient;
	colorRGB Diffuse;
	colorRGB Specular;
	float	 Shininess;
};

}/* namespace graphics */
#endif /*GRAPHICS__RS_H_*/